package com.me.template4j.util;

import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 通用操作类
 * @Authhor: qiu
 * @Date: 2021/12/8 12:32 下午
 */
@Component
public class CommonUtil {

    /**
     * 对象复制
     * @param object
     * @param clazz
     * @param <T>
     * @return
     */
    public static<T> T copyObject(Object object, Class<T> clazz) {
        T t = null;
        try {
            t = clazz.newInstance();
            BeanUtils.copyProperties(object,t,clazz);
        } catch (InstantiationException e) {
            e.printStackTrace();
            return null;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return null;
        }
        return t;
    }

    /**
     * 对象复制 list版本
     * @param objects
     * @param clazz
     * @param <T>
     * @return
     */
    public static<T> List<T> copyObject(List objects, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        objects.forEach(item -> {
            T t = copyObject(item, clazz);
            list.add(t);
        });

        return list;
    }

    /**
     * 字符串转化为base64
     * @param str 原文
     * @return
     */
    public String encodedStrToBase64(String str) {
        String encodedStr = Base64.getEncoder().encodeToString(str.getBytes());
        return encodedStr;
    }

    /**
     * base64转化为字符串
     * @param base64Str base64字符串
     * @return
     */
    public String decodedBase64ToStr(String base64Str) {
        byte[] decodedBytes = Base64.getDecoder().decode(base64Str);
        String originString = new String(decodedBytes);
        return originString;
    }


    /**
     * 用正则表达式判断这个字符串是否是数字
     * @param str
     * @return
     */
    public static boolean isNumber(String str) {

        Pattern pattern = Pattern.compile("-?[0-9]+(\\\\.[0-9]+)?");
        Matcher m = pattern.matcher(str);
        return m.matches();
    }

    /**
     * 生成随机数字 可碰撞 非唯一
     * @param length 长度
     * @return
     */
    public String generateRandomCode(int length) {
        Random random = new Random();
        StringBuffer code = new StringBuffer("");
        for(int i = 0; i <length; i++) {
            //包含0在里面
            code.append(random.nextInt(9));
        }
        return code.toString();
    }

}
